library(tidyverse)── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.0 ✔ purrr 1.0.1
✔ tibble 3.1.8 ✔ dplyr 1.0.10
✔ tidyr 1.3.0 ✔ stringr 1.5.0
✔ readr 2.1.3 ✔ forcats 0.5.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
library(readxl)
library(officer)
Attaching package: 'officer'
The following object is masked from 'package:readxl':
read_xlsx
Se configura el sistema en idioma español.
#Sys.setlocale("LC_ALL", "Spanish")
Sys.setlocale("LC_ALL", "es_ES.UTF-8")[1] "es_ES.UTF-8/es_ES.UTF-8/es_ES.UTF-8/C/es_ES.UTF-8/en_US.UTF-8"
datos <- read_excel("../data/mundial.xlsx")Se observan los resultados.
glimpse(datos)Rows: 1,006
Columns: 15
$ Pais <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador <chr> "Pervis Estupiñán", "Carlos Gruezo", "Moisés…
$ Posicion <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad <dbl> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados <dbl> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial <dbl> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados <dbl> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90 <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles <dbl> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias <dbl> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas <dbl> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…
Hay erroes en los nombres de los jugadores, por lo que se crean dos cadenas de caracteres, una con los caracteres incorrectos y otra con la sustitución correcta.
incorrecto <- c("Ã<81>", "é", "á", "ó", "Ã", "ñ", "óź", "í\u0081", "íº", "ź", "Å‚", "Å„", "¯", "í®", "í¢", "í¸", "í«", "í±", "¼", "Å«", "ć", "Å¡", "Ć", "ÄŒ", "§", "í‰", "£", "Ä™", "Ä…", "Å\u0081", "í“", "Å i", "Ä\u008d", "Ä\u0090", "Ž", "¦", "í¨", "í¤", "İ", "ÄŸ", "í´")
correcto <- c("Á", "é", "á", "ó", "í", "ñ", "ó", "Á", "ú", "z", "l", "ń", "ï", "î", "â", "ø", "ë", "ñ", "z", "ū", "ć", "š", "Ć", "Č", "ç", "É", "ã", "ę", "ą", "Ł", "Ó", "Ši", "č", "Đ", "Ž", "æ", "e", "ä", "İ", "ğ", "ô")Se crea una función en donde se reemplazan los caracteres incorrectos por los correctos.
replace_chars <- function(string, incorrect_chars, correct_chars) {
replacements <- setNames(correct_chars, incorrect_chars)
str_replace_all(string, replacements)
}Se aplica la función.
datos$Jugador <- replace_chars(datos$Jugador, incorrecto, correcto)Se observa el resultado.
datos$Jugador[0:100] [1] "Pervis Estupiñán" "Carlos Gruezo" "Moisés Caicedo"
[4] "Ángel Mena" "Michael Estrada" "Piero Hincapié"
[7] "Félix Torres Caicedo" "Alexander Domínguez" "Enner Valencia"
[10] "Ángelo Preciado" "Robert Arboleda" "Gonzalo Plata"
[13] "Byron Castillo" "Xavier Arreaga" "Alan Franco"
[16] "Hernán Galíndez" "Jhegson Méndez" "Ayrton Preciado"
[19] "Jeremy Sarmiento" "Romario Ibarra" "Moisés Ramírez"
[22] "Luis Fernando León" "Joao Joshimar Rojas" "Renato Ibarra"
[25] "Junior Sornoza" "Pedro Perlaza" "Fernando Gaibor"
[28] "Pedro Ortíz" "Jordy Caicedo" "José Cifuentes"
[31] "Christian Cruz" "Beder Caicedo" "José Carabalí"
[34] "Djorkaeff Reasco" "José Hurtado" "Erick Ferigra"
[37] "Adolfo Muñoz" "Christian Noboa" "Fidel Martínez"
[40] "Diego Palacios" "Janner Corozo" "Damián Díaz"
[43] "Brayan Angulo" "Romario Caicedo" "Washington Corozo"
[46] "Michael Carcelen" "Jhojan Julio" "Juan Cazares"
[49] "Leonardo Campana" "Memphis Depay" "Frenkie de Jong"
[52] "Davy Klaassen" "Daley Blind" "Georginio Wijnaldum"
[55] "Denzel Dumfries" "Steven Berghuis" "Justin Bijlow"
[58] "Virgil van Dijk" "Stefan de Vrij" "Matthijs de Ligt"
[61] "Tim Krul" "Owen Wijndal" "Cody Gakpo"
[64] "Donyell Malen" "Steven Bergwijn" "Arnaut Groeneveld"
[67] "Luuk de Jong" "Noa Lang" "Guus Til"
[70] "Marten de Roon" "Jasper Cillessen" "Tyrell Malacia"
[73] "Jurrien Timber" "Kenny Tete" "Ryan Gravenberch"
[76] "Teun Koopmeiners" "Wout Weghorst" "Donny van de Beek"
[79] "Ryan Babel" "Devyne Rensch" "Calvin Stengs"
[82] "Patrick van Aanholt" "Nathan Aké" "Kalidou Koulibaly"
[85] "Ismaila Sarr" "Idrissa Gana Gueye" "Saliou Ciss"
[88] "Edouard Mendy" "Sadio Mané" "Bouna Sarr"
[91] "Cheikhou Kouyaté" "Abdou Diallo" "Boulaye Dia"
[94] "Famara Diedhiou" "Pape Abou Cisse" "Nampalys Mendy"
[97] "Krepin Diatta" "Ibrahima Mbaye" "Habib Diallo"
[100] "Youssouf Sabaly"
Se buscan las celdas que solo contengan un nombre del jugador, puesto que esto indicaría un error en la digitación del nombre (los nombres son compuestos por dos o más palabras).
La expresión regular indica:
expresion_regular <- "^\\w+$"Se utilza la función grepl(), “Generalized Regular
Expression Pattern Matching” para filtrar los nombres de jugadores
que contengan una sola palabra. Se guarda en un objeto llamado
unicos.
unicos <- grepl(expresion_regular, datos$Jugador, perl = TRUE)Se obtienen 29 casos.
datos$Jugador[unicos] [1] "Koke" "Rodri" "Pedri" "Gavi" "Bryan"
[6] "Rodrigo" "Munir" "Marquinhos" "Danilo" "Neymar"
[11] "Casemiro" "Alisson" "Fred" "Fabinho" "Richarlison"
[16] "Ederson" "Raphinha" "Antony" "Gerson" "Emerson"
[21] "Allan" "Rodrygo" "Martinelli" "Felipe" "Pedro"
[26] "Hulk" "Wakaso" "Pepe" "Vitinha"
Se excluyen los 29 casos anteriores del data set. Se utiliza
subset() y el operador ! para indicar que
extraiga todos los casos diferentes a unicos (!unicos).
datos_limpios <- subset(datos, !unicos)Los datos originales tienen 1006 filas, al realizar el
proceso anterior, se obtiene un dataset con 977 filas.
length(datos$Jugador)[1] 1006
length(datos_limpios$Jugador)[1] 977
Se muestra un ejemplo del resultado.
glimpse(datos_limpios)Rows: 977
Columns: 15
$ Pais <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador <chr> "Pervis Estupiñán", "Carlos Gruezo", "Moisés Ca…
$ Posicion <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad <dbl> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados <dbl> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial <dbl> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados <dbl> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90 <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles <dbl> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias <dbl> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas <dbl> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…
Se revisa si hay datos duplicados en el nombre de los jugadores, se
utiliza la función duplicated(). Dicha función da una
vector con valores booleanos True o False, de
modo que la función which indica cuáles de esos valores
están duplicados. Así se genera un vector con los índices de los datos
duplicados. En este caso, el vector tiene longitud 0, lo que
indica que no hay nombres de jugadores duplicados.
duplicados <- duplicated(datos_limpios$Jugador)
indices_duplicados <- which(duplicados)
indices_duplicadosinteger(0)
Los resultados indican que no hay datos duplicados en los nombres de
los jugadores. Luego, se observa las categorías de las otras variables
cualitativas, iniciando por la región. Se utiliza la función
unique() para observar las categorías y la función
table() para revisar las frecuencias y que cada categoría
cuenta con casos.
unique(datos_limpios$Region)[1] "CONMEBOL" "UEFA" "CAF" "AFC" "CONCACAF"
table(datos$Region)
AFC CAF CONCACAF CONMEBOL UEFA
140 153 118 168 427
Se realiza lo mismo con la variable Posicion.
unique(datos_limpios$Posicion)[1] "Defensa" "Mediocentro" "Delantero" "Portero"
table(datos_limpios$Posicion)
Defensa Delantero Mediocentro Portero
323 230 353 71
Por último, inspecciona la variable Pais.
unique(datos_limpios$Pais) [1] "Ecuador" "Netherlands" "Senegal" "England"
[5] "IR Iran" "United States" "Wales" "Argentina"
[9] "Mexico" "Poland" "Australia" "Denmark"
[13] "France" "Tunisia" "Costa Rica" "Germany"
[17] "Japan" "Spain" "Belgium" "Canada"
[21] "Croatia" "Morocco" "Brazil" "Cameroon"
[25] "Serbia" "Switzerland" "Ghana" "Korea Republic"
[29] "Portugal" "Uruguay"
table(datos_limpios$Pais)
Argentina Australia Belgium Brazil Cameroon
38 16 35 23 31
Canada Costa Rica Croatia Denmark Ecuador
33 16 33 36 49
England France Germany Ghana IR Iran
34 31 33 35 40
Japan Korea Republic Mexico Morocco Netherlands
45 39 31 28 34
Poland Portugal Senegal Serbia Spain
39 32 28 26 33
Switzerland Tunisia United States Uruguay Wales
29 29 38 39 24
En todas las condiciones anteriores, hay datos válidos para cada una de las categorías.
Se buscan datos nulos en cada una de las variables. En este caso, no se va a implementar métodos de imputación, simplemente se extraen dichos casos.
Se crea un ciclo for que itere sobre cada una de las
columnas de los datos, de modo que utiliza la función
is.na() para detectar los datos faltantes.
num_columnas <- ncol(datos_limpios) #Número de columnasfor (i in 1:num_columnas) { #de 1 a n columnas
valores_faltantes <- is.na(datos_limpios[, i]) #Guarda la cantidad de NA por cada columna
cantidad_faltantes <- sum(valores_faltantes) #Suma todos los NA
cat(colnames(datos_limpios)[i], ":", cantidad_faltantes, "\n") #Imprime el nombre de la columna y la cantidad de NA`s
}Pais : 0
Region : 0
Jugador : 0
Posicion : 0
Edad : 0
Partidos_Jugados : 0
Partidos_11_inicial : 0
Minutos_jugados : 0
Minutos_jugados_90 : 0
Goles : 0
Asistencias : 0
Amarillas : 0
Rojas : 0
Goles_por_minuto : 0
Asistencias_por_minuto : 0
Nótese que casi todas las variables están en el formato correcto, exceptuando a las variables que contienen números enteros.
glimpse(datos_limpios)Rows: 977
Columns: 15
$ Pais <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador <chr> "Pervis Estupiñán", "Carlos Gruezo", "Moisés Ca…
$ Posicion <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad <dbl> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados <dbl> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial <dbl> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados <dbl> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90 <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles <dbl> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias <dbl> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas <dbl> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…
Se utiliza la función apply() para iterar sobre las
columnas que contienen valores enteros. Primero se crea un vector con
los nombres de las variables y se guarda en un objeto llamado
var_disc (variables discretas).
var_disc <- c("Edad", "Partidos_Jugados", "Partidos_11_inicial", "Minutos_jugados", "Goles", "Asistencias", "Amarillas", "Rojas")Para hacer un slicing se adjunta el vector a un
parántesis cuadrado del data set, así se obtiene una subselección de los
datos.
datos_limpios[var_disc]# A tibble: 977 × 8
Edad Partidos_Jugados Partidos_11_inic…¹ Minut…² Goles Asist…³ Amari…⁴ Rojas
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 24 17 17 1513 2 1 2 0
2 26 16 16 1395 1 0 2 0
3 20 15 15 1305 2 4 5 0
4 34 15 13 1079 2 3 2 0
5 25 17 11 1043 6 2 2 0
6 20 11 11 990 1 0 1 0
7 25 11 11 990 2 0 2 0
8 34 10 10 824 0 0 2 1
9 32 12 10 758 4 1 5 0
10 23 13 8 755 0 0 1 0
# … with 967 more rows, and abbreviated variable names ¹Partidos_11_inicial,
# ²Minutos_jugados, ³Asistencias, ⁴Amarillas
Luego, se le aplica la función as.interger() para
convertir los datos en formato de número entero, se utiliza como
argunmento dentro de apply().
datos_limpios[var_disc] <- as.data.frame(apply(datos_limpios[var_disc], 2, as.integer)) #El 2 indica que se aplique a cada columna en lugar de cada filaNótese que ahora variables como Goles se encuentran
etiquetadas como int, mientras que variables continuas como
Goles por minuto se encuentran categorizadas como
dbl.
glimpse(datos_limpios)Rows: 977
Columns: 15
$ Pais <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador <chr> "Pervis Estupiñán", "Carlos Gruezo", "Moisés Ca…
$ Posicion <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad <int> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados <int> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial <int> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados <int> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90 <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles <int> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias <int> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas <int> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas <int> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…
Para hacer un mejor manejo de las variables se crean vectores que
agrupan las columnas por su tipo de medición, a saber,
variables cualitativas,
variables cuantitativas discretas,
variables cuantitativas de razón o continua. Estos vectores
se utilizarán dependiendo del caso.
var_cual <- c("Pais", "Region", "Posicion") #Se extrae la variable jugador debido a que no se puede utilizar agrupaciones en la misma
var_disc <- c("Edad", "Partidos_Jugados", "Partidos_11_inicial", "Minutos_jugados", "Goles", "Asistencias", "Amarillas", "Rojas")
var_cont <- c("Minutos_jugados_90", "Goles_por_minuto", "Asistencias_por_minuto")
var_cuant <- c("Edad", "Partidos_Jugados", "Partidos_11_inicial", "Minutos_jugados", "Goles", "Asistencias", "Amarillas", "Rojas","Minutos_jugados_90", "Goles_por_minuto", "Asistencias_por_minuto")Se crea un ciclo for para genera cada una de las tablas
y crear un objeto con el respectivo nombre de la columna. Se utiliza la
función assign() para crear dichos objetos.
for (columna in var_cual) {
tabla_frecuencias <- table(datos_limpios[[columna]]) #Se crea una tabla de frecuencias por cada variable
tabla_frecuencias <- addmargins(tabla_frecuencias, FUN = list("Total General" = sum), quiet = TRUE) # Se crea la fila del total general al final
tabla_frecuencias <- as.data.frame(tabla_frecuencias) #Se convierte en data frame
colnames(tabla_frecuencias) <- c(columna, "Frecuencia") #Se indica el nombre de las columnas
assign(paste("tabla_", columna, sep = ""), tabla_frecuencias) #Se crea un objeto por cada tabla
}Se observan los resultados.
tabla_Pais Pais Frecuencia
1 Argentina 38
2 Australia 16
3 Belgium 35
4 Brazil 23
5 Cameroon 31
6 Canada 33
7 Costa Rica 16
8 Croatia 33
9 Denmark 36
10 Ecuador 49
11 England 34
12 France 31
13 Germany 33
14 Ghana 35
15 IR Iran 40
16 Japan 45
17 Korea Republic 39
18 Mexico 31
19 Morocco 28
20 Netherlands 34
21 Poland 39
22 Portugal 32
23 Senegal 28
24 Serbia 26
25 Spain 33
26 Switzerland 29
27 Tunisia 29
28 United States 38
29 Uruguay 39
30 Wales 24
31 Total General 977
tabla_Posicion Posicion Frecuencia
1 Defensa 323
2 Delantero 230
3 Mediocentro 353
4 Portero 71
5 Total General 977
tabla_Region Region Frecuencia
1 AFC 140
2 CAF 151
3 CONCACAF 118
4 CONMEBOL 149
5 UEFA 419
6 Total General 977
Por último, se guradan las tablas de frecuencias en un documento de
Word, para ello se vuelve a correr el ciclo for, pero se le
incluye el código para guardarlo.
doc_tablas <- read_docx() #Se crea el documento Wordfor (columna in var_cual) {
tabla_frecuencias <- table(datos_limpios[[columna]])
tabla_frecuencias <- addmargins(tabla_frecuencias, FUN = list("Total General" = sum), quiet = TRUE)
tabla_frecuencias <- as.data.frame(tabla_frecuencias)
colnames(tabla_frecuencias) <- c(columna, "Frecuencia")
assign(paste("tabla_", columna, sep = ""), tabla_frecuencias) #Se crea un objeto por cada tabla
#Se guarda en un Word
doc_tablas <- doc_tablas %>%
body_add_par(columna, style ="heading 1") %>% #Se agrega el título
body_add_par("") %>% # Se agrega un enter
body_add_table(value = tabla_frecuencias,
align_table = "center",
style = "table_template") %>% #Se agrega la tabla
body_add_break(pos = "after") #Se agrega salto de página
}Se guarda el documento en la caperta docs.
print(doc_tablas, target = "../docs/frecuencias.docx")Se crean las tablas cruzadas con la función table().
region_posicion <- table(datos_limpios$Region, datos_limpios$Posicion)
region_posicion
Defensa Delantero Mediocentro Portero
AFC 50 27 55 8
CAF 50 36 55 10
CONCACAF 43 30 38 7
CONMEBOL 47 30 59 13
UEFA 133 107 146 33
pais_posicion <- table(datos_limpios$Pais, datos_limpios$Posicion)
pais_posicion
Defensa Delantero Mediocentro Portero
Argentina 11 9 13 5
Australia 6 3 5 2
Belgium 7 13 12 3
Brazil 9 5 8 1
Cameroon 11 9 9 2
Canada 11 6 13 3
Costa Rica 7 4 4 1
Croatia 11 6 13 3
Denmark 10 12 13 1
Ecuador 16 9 20 4
England 10 9 11 4
France 11 7 12 1
Germany 10 8 12 3
Ghana 9 8 15 3
IR Iran 14 7 17 2
Japan 17 7 19 2
Korea Republic 13 10 14 2
Mexico 12 8 10 1
Morocco 11 7 9 1
Netherlands 12 11 7 4
Poland 14 5 16 4
Portugal 10 8 11 3
Senegal 10 5 11 2
Serbia 7 4 13 2
Spain 14 11 6 2
Switzerland 8 6 14 1
Tunisia 9 7 11 2
United States 13 12 11 2
Uruguay 11 7 18 3
Wales 9 7 6 2
Se añaden las columnas y filas de totales generales
region_posicion_cruzada <- cbind(region_posicion, "Total General" = rowSums(region_posicion)) #Se crea la columna de total general
region_posicion_cruzada <- addmargins(region_posicion, FUN = list("Total General" = sum), quiet = TRUE) #Se crea la fila de total general
region_posicion_cruzada <- as.data.frame.matrix(region_posicion_cruzada) #Se convierte la matriz en data frame
region_posicion_cruzada <- rownames_to_column(region_posicion_cruzada, "Region") #Se renombran las columnas
region_posicion_cruzada Region Defensa Delantero Mediocentro Portero Total General
1 AFC 50 27 55 8 140
2 CAF 50 36 55 10 151
3 CONCACAF 43 30 38 7 118
4 CONMEBOL 47 30 59 13 149
5 UEFA 133 107 146 33 419
6 Total General 323 230 353 71 977
pais_posicion_cruzada <- cbind(pais_posicion, "Total General" = rowSums(pais_posicion))
pais_posicion_cruzada <- addmargins(pais_posicion, FUN = list("Total General" = sum), quiet = TRUE)
pais_posicion_cruzada <- as.data.frame.matrix(pais_posicion_cruzada)
pais_posicion_cruzada <- rownames_to_column(pais_posicion_cruzada, "Pais")
pais_posicion_cruzada Pais Defensa Delantero Mediocentro Portero Total General
1 Argentina 11 9 13 5 38
2 Australia 6 3 5 2 16
3 Belgium 7 13 12 3 35
4 Brazil 9 5 8 1 23
5 Cameroon 11 9 9 2 31
6 Canada 11 6 13 3 33
7 Costa Rica 7 4 4 1 16
8 Croatia 11 6 13 3 33
9 Denmark 10 12 13 1 36
10 Ecuador 16 9 20 4 49
11 England 10 9 11 4 34
12 France 11 7 12 1 31
13 Germany 10 8 12 3 33
14 Ghana 9 8 15 3 35
15 IR Iran 14 7 17 2 40
16 Japan 17 7 19 2 45
17 Korea Republic 13 10 14 2 39
18 Mexico 12 8 10 1 31
19 Morocco 11 7 9 1 28
20 Netherlands 12 11 7 4 34
21 Poland 14 5 16 4 39
22 Portugal 10 8 11 3 32
23 Senegal 10 5 11 2 28
24 Serbia 7 4 13 2 26
25 Spain 14 11 6 2 33
26 Switzerland 8 6 14 1 29
27 Tunisia 9 7 11 2 29
28 United States 13 12 11 2 38
29 Uruguay 11 7 18 3 39
30 Wales 9 7 6 2 24
31 Total General 323 230 353 71 977
Por último, se guardan en un archivo de Word.
doc_tablas <- read_docx() #Se crea el documento Word
doc_tablas <- doc_tablas %>%
body_add_par("Tabla Cruzada de posición y región", style ="heading 1") %>% #Se agrega el título
body_add_par("") %>% # Se agrega un enter
body_add_table(value = region_posicion_cruzada,
align_table = "center",
style = "table_template")%>%
body_add_break(pos = "after") %>% #Se agrega salto de página
body_add_par("Tabla Cruzada de país y posición", style ="heading 1") %>% #Se agrega el título
body_add_par("") %>% # Se agrega un enter
body_add_table(value = pais_posicion_cruzada,
align_table = "center",
style = "table_template")%>% #Se agrega la tabla
body_add_break(pos = "after")
# Se guarda en un documento de Word
print(doc_tablas, target = "../docs/cruzadas.docx")Se revisan las estadísticas descriptivas de las variables
cuantitativas.Se utiliza la función summary().
summary(datos_limpios[var_cuant]) Edad Partidos_Jugados Partidos_11_inicial Minutos_jugados
Min. :17.00 Min. : 1.000 Min. : 0.000 Min. : 1.0
1st Qu.:24.00 1st Qu.: 2.000 1st Qu.: 1.000 1st Qu.: 90.0
Median :26.00 Median : 4.000 Median : 2.000 Median : 235.0
Mean :26.59 Mean : 5.055 Mean : 3.635 Mean : 327.7
3rd Qu.:29.00 3rd Qu.: 7.000 3rd Qu.: 6.000 3rd Qu.: 502.0
Max. :38.00 Max. :19.000 Max. :17.000 Max. :1522.0
Goles Asistencias Amarillas Rojas
Min. : 0.0000 Min. :0.0000 Min. :0.0000 Min. :0.00000
1st Qu.: 0.0000 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.00000
Median : 0.0000 Median :0.0000 Median :0.0000 Median :0.00000
Mean : 0.7155 Mean :0.4923 Mean :0.4954 Mean :0.01228
3rd Qu.: 1.0000 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:0.00000
Max. :13.0000 Max. :8.0000 Max. :6.0000 Max. :1.00000
Minutos_jugados_90 Goles_por_minuto Asistencias_por_minuto
Min. : 0.000 Min. :0.0000 Min. :0.0000
1st Qu.: 1.000 1st Qu.:0.0000 1st Qu.:0.0000
Median : 2.600 Median :0.0000 Median :0.0000
Mean : 3.641 Mean :0.2056 Mean :0.1635
3rd Qu.: 5.600 3rd Qu.:0.2000 3rd Qu.:0.1400
Max. :16.900 Max. :6.4300 Max. :9.0000
Se crea una tabla por cada variable y se guarda en un documento de Word.
doc_tablas <- read_docx() #Se crea el documento Word
list_descr <- lst() #Se crea una lista vacía en donde se van a ir guardando cada tabla
for (columna in var_cuant) {
tabla_descriptiva <-summary(datos_limpios[columna]) #Se crea la tabla por cada columna
tabla_descriptiva <- as.data.frame((tabla_descriptiva[,1])) #Se convierte a una data frame
colnames(tabla_descriptiva) <- c(columna) #Se cambia el nombre de las columnas
assign(paste("tabla_", columna, sep = ""), as.data.frame(tabla_descriptiva)) #Se asigna a un objeto
list_descr <- append(list_descr, tabla_descriptiva) #Se adjunta a la lista
#Se guarda en un Word
doc_tablas <- doc_tablas%>%
body_add_par(columna, style ="heading 1") %>% #Se agrega el título
body_add_par("") %>% # Se agrega un enter
body_add_table(value = tabla_descriptiva,
align_table = "center",
style = "table_template") %>% #Se agrega la tabla
body_add_break(pos = "after") #Se agrega salto de página
}Se guarda el documento en la caperta docs.
print(doc_tablas, target = "../docs/descriptivas.docx")Se observan algunos ejemplos de las tablas.
as.data.frame(list_descr$Goles_por_minuto) list_descr$Goles_por_minuto
1 Min. :0.0000
2 1st Qu.:0.0000
3 Median :0.0000
4 Mean :0.2056
5 3rd Qu.:0.2000
6 Max. :6.4300
as.data.frame(list_descr$Goles) list_descr$Goles
1 Min. : 0.0000
2 1st Qu.: 0.0000
3 Median : 0.0000
4 Mean : 0.7155
5 3rd Qu.: 1.0000
6 Max. :13.0000
Se pueden generar tablas descriptivas de las variables agregadas por
la Posicion, por ello se utiliza el operador
pipe %>%.
promedio_gol <- datos_limpios %>% #Se toma la base de datos
group_by(Posicion) %>% # Se agrupan por la variable posición
summarize(Promedio = mean(Goles), Mediana = median(Goles), Des_Estand = sd(Goles)) #Se crean estadísticos descriptivos por la variable goles
promedio_gol# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.226 0 0.575
2 Delantero 1.64 1 2.41
3 Mediocentro 0.705 0 1.25
4 Portero 0 0 0
Se crea un ciclo for para crear todas las tablas y
guardarlas en un archivo de Word.
doc_tablas <- read_docx() #Se crea el documento Word
for (var in var_cuant){
tabla_posicion <- datos_limpios %>%
group_by(Posicion) %>%
summarize(Promedio = mean(!!sym(var)), Mediana = median(!!sym(var)), Des_Estand = sd(!!sym(var)))
#!!sym(var) convierte la cadena de caracteres en un símbolo en dplyr
assign(paste("tabla_posicion_", var, sep = ""), tabla_posicion) #Se crea un objeto por cada tabla
#Se guarda en un Word
doc_tablas <- doc_tablas %>%
body_add_par(var, style ="heading 1") %>% #Se agrega el título
body_add_par("") %>% # Se agrega un enter
body_add_table(value = tabla_posicion,
align_table = "center",
style = "table_template") %>% #Se agrega la tabla
body_add_break(pos = "after") #Se agrega salto de página
}
# Se guarda el documento de Word
print(doc_tablas, target = "../docs/agregadas_posicion.docx")Se observan los resultados
for (var in var_cuant){
print(paste0("tabla_posicion_", var))
}[1] "tabla_posicion_Edad"
[1] "tabla_posicion_Partidos_Jugados"
[1] "tabla_posicion_Partidos_11_inicial"
[1] "tabla_posicion_Minutos_jugados"
[1] "tabla_posicion_Goles"
[1] "tabla_posicion_Asistencias"
[1] "tabla_posicion_Amarillas"
[1] "tabla_posicion_Rojas"
[1] "tabla_posicion_Minutos_jugados_90"
[1] "tabla_posicion_Goles_por_minuto"
[1] "tabla_posicion_Asistencias_por_minuto"
for (var in var_cuant){
tabla_posicion <- get(paste0("tabla_posicion_", var)) #Convierte la cada de texto en un objeto
print(tabla_posicion) #Imprime tabla
print("_______________________________________") #Imprime línea de separación
}# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 26.9 27 3.75
2 Delantero 26.1 26 3.90
3 Mediocentro 26.1 26 3.93
4 Portero 29.6 29 3.92
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 4.81 4 3.74
2 Delantero 4.98 4 3.63
3 Mediocentro 5.41 5 3.88
4 Portero 4.65 4 3.75
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 3.96 3 3.61
2 Delantero 2.93 1 3.53
3 Mediocentro 3.62 2 3.65
4 Portero 4.52 4 3.86
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 360. 302 316.
2 Delantero 269. 141 289.
3 Mediocentro 321. 224 300.
4 Portero 407. 360 340.
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.226 0 0.575
2 Delantero 1.64 1 2.41
3 Mediocentro 0.705 0 1.25
4 Portero 0 0 0
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.341 0 0.670
2 Delantero 0.657 0 1.21
3 Mediocentro 0.620 0 1.12
4 Portero 0.0141 0 0.119
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.573 0 0.886
2 Delantero 0.361 0 0.727
3 Mediocentro 0.575 0 0.927
4 Portero 0.183 0 0.516
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.0186 0 0.135
2 Delantero 0.00870 0 0.0930
3 Mediocentro 0.00850 0 0.0919
4 Portero 0.0141 0 0.119
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 3.99 3.4 3.51
2 Delantero 2.99 1.6 3.21
3 Mediocentro 3.57 2.5 3.33
4 Portero 4.52 4 3.77
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.0548 0 0.195
2 Delantero 0.508 0.275 0.808
3 Mediocentro 0.188 0 0.471
4 Portero 0 0 0
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.130 0 0.582
2 Delantero 0.252 0 0.662
3 Mediocentro 0.168 0 0.330
4 Portero 0.00704 0 0.0593
[1] "_______________________________________"
Se utilizan gráficos de barras para mostrar la
distribución de las variables cualitativas.Se agrupan por
Pais y se suma su frecuencia (n = ()).
pais_jugadores <- datos_limpios %>%
group_by(Pais)%>% #Se agrupan los datos por pais
summarize(Frecuencia = n()) %>% #Se cuentan los casos (n)
arrange(Frecuencia) #Se ordenan de menor a mayorpais_jugadores# A tibble: 30 × 2
Pais Frecuencia
<chr> <int>
1 Australia 16
2 Costa Rica 16
3 Brazil 23
4 Wales 24
5 Serbia 26
6 Morocco 28
7 Senegal 28
8 Switzerland 29
9 Tunisia 29
10 Cameroon 31
# … with 20 more rows
g <- ggplot(pais_jugadores, aes(x = Frecuencia, y = reorder(Pais, desc(Frecuencia))))+
geom_bar(stat = "identity", width = 0.8, show.legend = FALSE, fill = "steelblue" ) + #Identity hace conteos, se le quita la leyenda, se rellena con color azul y se le da un ancho de 0.8
geom_text(aes(label = Frecuencia), vjust = 0.5, hjust = -0.4, size = 3) + # Se agrega el valor de la columna el final de la barra y se ajusta (hjust, vjust), el tamaño de las barras es de 3
labs(title = "Cantidad de jugadores por país", x = "Pais", y = "Cantidad de Jugadores")+ #Títulos y nombres de los ejes x,y
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) + #Se configura el caption
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gSe guarda el archivo en la caperta graficos.
ggsave("../graficos/pais_barplot.png", width = 8, height = 6, dpi = 300)Se grafica la variable Región.
region_jugadores <- datos_limpios %>%
group_by(Region)%>%
summarize(Frecuencia = n()) %>%
arrange(Frecuencia)region_jugadores# A tibble: 5 × 2
Region Frecuencia
<chr> <int>
1 CONCACAF 118
2 AFC 140
3 CONMEBOL 149
4 CAF 151
5 UEFA 419
ggplot(region_jugadores, aes(x = Frecuencia, y = reorder(Region, desc(Frecuencia))))+
geom_bar(stat = "identity", width = 0.8, show.legend = FALSE, fill = "steelblue" ) +
geom_text(aes(label = Frecuencia), vjust = 0.5, hjust = -0.4, size = 3) +
labs(title = "Cantidad de jugadores por Región", x = "Region", y = "Cantidad de Jugadores")+
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/region_barplot.png", width = 8, height = 6, dpi = 300)posicion_jugadores <- datos_limpios %>%
group_by(Posicion)%>%
summarize(Frecuencia = n()) %>%
arrange(Frecuencia)posicion_jugadores# A tibble: 4 × 2
Posicion Frecuencia
<chr> <int>
1 Portero 71
2 Delantero 230
3 Defensa 323
4 Mediocentro 353
ggplot(posicion_jugadores, aes(y = Frecuencia, x = reorder(Posicion, desc(Frecuencia))))+
geom_bar(stat = "identity", width = 0.8, show.legend = FALSE, fill = "steelblue" ) +
geom_text(aes(label = Frecuencia), vjust = -0.5, hjust = 0.5, size = 3) +
labs(title = "Cantidad de jugadores por Posición", x = "Posición", y = "Cantidad de Jugadores")+
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/posicion_barplot.png", width = 8, height = 6, dpi = 300)Se utilizan histogramas para representar la
distribuciones de los valores enteros.
g <- ggplot(datos_limpios, aes(x = Edad)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) + #Histograma con lineas blancas, ancho de 1 persona por barra y relleno azul
labs(title = "Histograma de Edad", x = "Valores", y = "Frecuencia") + #Titulo y etiquetas de los ejes x, y
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Edad), max(datos_limpios$Edad), 1)) + #Solicita ir de 1 en 1 en la numeración del eje x.
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Edad, group = Posicion,fill = Posicion)) + #Se agrupa y colorea por posición
geom_histogram(binwidth=1, color = "white") +
facet_wrap(~ Posicion) + #Se crea una parrilla y coloca cada histograma en una columna, en este caso la posición.
labs(title = "Histograma de Edad", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Edad), max(datos_limpios$Edad), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/edad_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Partidos_Jugados)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
labs(title = "Histograma de Partidos Jugados", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_Jugados), max(datos_limpios$Partidos_Jugados), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Partidos_Jugados, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de Partidos Jugados", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_Jugados), max(datos_limpios$Partidos_Jugados), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/partidos_jugados_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Partidos_11_inicial)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
labs(title = "Histograma de Partidos Jugados desde el inicio", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_11_inicial), max(datos_limpios$Partidos_11_inicial), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Partidos_11_inicial, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de Partidos Jugados desde el inicio", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_11_inicial), max(datos_limpios$Partidos_11_inicial), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/partidos_11_inicial_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Minutos_jugados)) +
geom_histogram(fill = "steelblue", binwidth=20, color = "white") +
labs(title = "Histograma de minutos jugados", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Minutos_jugados, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=20) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de minutos jugados", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/minutos_jugados_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Goles)) +
geom_histogram(fill = "steelblue", binwidth=1, color = "white") +
labs(title = "Histograma de Goles", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Goles), max(datos_limpios$Goles), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Goles, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de Goles", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Goles), max(datos_limpios$Goles), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/goles_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Asistencias)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
labs(title = "Histograma de Asistencias", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Asistencias), max(datos_limpios$Asistencias), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Asistencias, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de Asistencias", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Asistencias), max(datos_limpios$Asistencias), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/asistencias_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Amarillas)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
labs(title = "Histograma de tarjetas amarillas", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Amarillas), max(datos_limpios$Amarillas), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Amarillas, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de tarjetas amarillas", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Amarillas), max(datos_limpios$Amarillas), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/amarillas_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Rojas)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
labs(title = "Histograma de tarjetas rojas", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Rojas), max(datos_limpios$Rojas), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Rojas, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de tarjetas rojas", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Rojas), max(datos_limpios$Rojas), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/rojas_histplot.png", width = 8, height = 6, dpi = 300)Se utilizan gráficos de densidad, para las variables
continuas ya que tienen valores con decimales.
g <- ggplot(datos_limpios, aes(x = Minutos_jugados_90)) + #Se utiliza solo una variable
geom_density(fill = "steelblue", alpha = 0.5) + #Alfa es la opacidad del color debajo de la curva
labs(title = "Minutos Jugados en 90 minutos", x = "Minutos Jugados", y = "Densidad", caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Minutos_jugados_90, group = Posicion, fill = Posicion)) +
geom_density(alpha = 0.4) + #Indica el tipo de gráfico y la opacidad
facet_wrap(~ Posicion) + #Se hace una regilla con las categorías de las posiciones
scale_x_continuous(breaks = seq(min(datos_limpios$Minutos_jugados_90), max(datos_limpios$Minutos_jugados_90), 2)) + #Indica que los valores del eje x vayan de 1 a 1
labs(title = "Minutos jugados y posición del jugador", y = "Densidad", x = "Cantidad de Minutos", caption = "Trabajo Final, Estadística Introductoria. UCR") Se guarda el archivo en la caperta graficos.
ggsave("../graficos/minutos_jugados_90_densplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Goles_por_minuto)) +
geom_density(fill = "steelblue", alpha = 0.5) +
labs(title = "Goles por minuto", x = "Goles", y = "Densidad", caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Goles_por_minuto, group = Posicion, fill = Posicion)) +
geom_density(alpha = 0.4) +
facet_wrap(~ Posicion) +
scale_x_continuous(breaks = seq(min(datos_limpios$Goles_por_minuto), max(datos_limpios$Goles_por_minuto), 1)) +
labs(title = "Goles por minuto y posición del jugador", y = "Densidad", x = "Cantidad de goles por minuto", caption = "Trabajo Final, Estadística Introductoria. UCR") Se guarda el archivo en la caperta graficos.
ggsave("../graficos/minutos_jugados_90_densplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Asistencias_por_minuto)) +
geom_density(fill = "steelblue", alpha = 0.5) +
labs(title = "Asistencias por minuto", x = "Asistencias", y = "Densidad", caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Asistencias, group = Posicion, fill = Posicion)) +
geom_density(alpha = 0.4) +
facet_wrap(~ Posicion) +
scale_x_continuous(breaks = seq(min(datos_limpios$Asistencias_por_minuto), max(datos_limpios$Asistencias_por_minuto), 1)) +
labs(title = "Asistencias por minuto y posición del jugador", y = "Densidad", x = "Cantidad de Asistencias", caption = "Trabajo Final, Estadística Introductoria. UCR") Se guarda el archivo en la caperta graficos.
ggsave("../graficos/asistencias_por_minuto_densplot.png", width = 8, height = 6, dpi = 300)